/**
 * Copyright (C) 2022-2023
 * All rights reserved, Designed By www.tonetn.com
 * 注意：
 * 本软件为www.tonetn.com开发研制，未经购买不得使用
 * 购买后可获得全部源代码（禁止转卖、分享、上传到码云、github等开源平台）
 * 一经发现盗用、分享等行为，将追究法律责任，后果自负
 */
package com.xunyin.modules.shareorder.service;

import com.alibaba.fastjson.JSONObject;
import com.xunyin.common.service.BaseService;
import com.xunyin.modules.recharge.domain.TRechargeOrder;
import com.xunyin.modules.shareorder.bo.OrderDateHour;
import com.xunyin.modules.shareorder.domain.TShareOrder;
import com.xunyin.modules.shareorder.param.TShareOrderParam;
import com.xunyin.modules.shareorder.service.dto.OrderStatDto;
import com.xunyin.modules.shareorder.service.dto.ShareOrderCountDto;
import com.xunyin.modules.shareorder.service.dto.TShareOrderQueryCriteria;
import com.xunyin.modules.shareorder.vo.TShareOrderForSwitchVo;
import com.xunyin.modules.shareorder.vo.TShareOrderVo;
import org.springframework.data.domain.Pageable;

import java.util.List;
import java.util.Map;

/**
 * @author admin
 * @date 2022-09-22
 */
public interface TShareOrderService extends BaseService<TShareOrder> {

    List<OrderDateHour> getTimeListOrderV2(TShareOrderParam tShareOrderParam);

    Map<String, Object> getTimeListOrder(TShareOrderParam tShareOrderParam);

    JSONObject getOrderInfo(JSONObject jsonObject);

    /**
     * 查询数据分页
     * @param criteria 条件
     * @param pageable 分页参数
     * @return Map<String, Object>
     */
    Map<String, Object> queryAll(TShareOrderQueryCriteria criteria, Pageable pageable);

    /**
     * 查询所有数据不分页
     * @param criteria 条件参数
     * @return List<TShareOrderDto>
     */
    List<TShareOrder> queryAll(TShareOrderQueryCriteria criteria);

    OrderStatDto getOrderStat(Integer storeId);

    OrderStatDto getOrderStatByDayNum(Integer storeId,Integer dayNum);

    /**
     * 首页续单接口
     * 根据用户id获取当前正在使用的订单
     * @param tShareOrderParam
     * @return List<TShareOrderDto>
     */
    List<TShareOrderVo> repeatOrder(TShareOrderParam tShareOrderParam);

    TShareOrderVo repeatOrderList(TShareOrderParam tShareOrderParam);

    List<TShareOrderForSwitchVo> getStoreRoomDevice(TShareOrderParam tShareOrderParam);

    /**
     * 首页单个订单开门码调用接口
     * 根据用户id获取订单二维码
     * @param userId
     * @return List<TShareOrderForSwitchVo>
     */
    List<TShareOrderForSwitchVo> getOrderQrCode(Integer userId);

/*    SortedMap<String, String> orderPay(TShareOrderParam tShareOrderParam);

    SortedMap<String, String> immediatePay(TShareOrderParam tShareOrderParam);

    SortedMap<String, String> rechargeOrderPay(TShareOrderParam tShareOrderParam);*/

    List<TShareOrderVo> getOrderListByUserId(TShareOrderParam tShareOrderParam);

    List<TShareOrderVo> successOrder(Integer userId);

    /**
     * 待付款的订单列表
     * 根据用户id获取待付款的订单列表
     * @param userId
     * @return List<TShareOrderVo>
     */
    List<TShareOrderVo> toBePaidOrder(Integer userId);

    /**
     * 待使用的订单列表
     * 根据用户id获取待使用的订单列表
     * @param userId
     * @return List<TShareOrderVo>
     */
    List<TShareOrderVo> toUseOrder(Integer userId);

    /**
     * 使用中的订单列表
     * 根据用户id获取使用中的订单列表
     * @param userId
     * @return List<TShareOrderVo>
     */
    List<TShareOrderVo> inUseOrder(Integer userId);

    /**
     * 已取消的订单列表
     * 根据用户id获取已取消的订单列表
     * @param userId
     * @return List<TShareOrderVo>
     */
    List<TShareOrderVo> cancelOrder(Integer userId);

    /**
     * 取消订单
     *
     * @param tShareOrderParam
     * @return
     */
    Boolean cancelOrderPay(TShareOrderParam tShareOrderParam);

    void refundConpon(TShareOrder orderInfo);

    void refundProcess(TShareOrder orderInfo);

    void insertIntoRecord(TShareOrderParam tShareOrderParam);

    List<TShareOrderVo> loadTeaHouseOrder4Manage(Integer storeId, Integer orderStatus,Integer dayNum);

    List<TShareOrderVo> loadTeaHouseOrder4ManageByCleaningRecord(Integer storeId, Integer orderStatus,Integer dayNum);

    TShareOrderVo getOrderInfo(String unique, Long uid);

    List<TShareOrder> createOrder(TShareOrderParam tShareOrderParam);

    void deductMembersTimelong(Integer mainId, String memberUserPhone, Double deductTimelong, Double memberTimeLong);

    TShareOrder selectByAppOrderNo(String orderId);

    TShareOrder selectById(Integer id);

    void paySuccess(TShareOrder orderInfo);

    /**
     *  创建充值订单
     *  @param tShareOrderParam
     * @return
     */
    TRechargeOrder createRechargeOrder(TShareOrderParam tShareOrderParam);

    ShareOrderCountDto getOrderCount(Integer storeId);

    Map<String, Object> chartCount(Integer storeId);

    List<TShareOrderVo> orderListByRoomId(Integer storeRoomId);
}
